﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


//using LitJson;
using System.Data.SqlClient;
using System.Collections;
using System.Runtime.Serialization;
using System.Web;
using System.Net;
using System.IO;
using System.Xml;
using System.Configuration;
using System.Data;
using RegisterationCommon.Common;

namespace RegisterationCommon.Education
{
    
    public class BackupDatabase
    {
    //    /// <summary>
    //    /// 验证指定路径的目录是否存在
    //    /// </summary>
    //    /// <param name="DirPath">要验证的目录路径与名称</param>
    //    /// <returns></returns>
    //    public bool CheckDirExists(string DirPath)
    //    {
    //        return Directory.Exists(DirPath);
    //    }
    //    //获取文件列表
    //    public string GetBakDBList(string param)
    //    {
    //        JsonData jsonList = JsonMapper.ToObject(param);
    //        //string BakPath = HttpRuntime.AppDomainAppPath.ToString() + ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString() + @"\" + jsonList[0]["HotelID"].ToString() + @"\";
    //        //string BakPath = HttpRuntime.AppDomainAppPath.ToString() + ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString() ;
    //        string BakPath = ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString();
    //        //  FSOAction Fso = new FSOAction();
    //        //if (!CheckDirExists(BakPath))
    //        //{
    //        //    return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //        //}

    //        string[] FArr = GetFileList(BakPath);
    //        StringBuilder FList = new StringBuilder();
    //        for (int n = 0; n < FArr.Length; n++)
    //        {
    //            string[] NArr = FArr[n].Split('\\');

    //            FList.Append("{'ID':'" + n + "','Name':'" + NArr[NArr.Length - 1] + "','Time':'" + File.GetLastWriteTime(FArr[n]).ToString() + "'}");
    //            if (n < FArr.Length - 1)
    //            {
    //                FList.Append(",");
    //            }
    //        }

    //        return "{'result':'" + ReturnResultType.Success + "','rows':[" + FList.ToString() + "]}";
    //    }

    //    //备份数据库
    //    public string BakupDB1(string param)
    //    {
    //        //权限验证
    //        //if (myAccount.PMCheck(1, false) == false)
    //        //{
    //        //    return myAccount.StatusCode;
    //        //}

    //        JsonData jsonList = JsonMapper.ToObject(param);
            
    //        //string BakPath = HttpRuntime.AppDomainAppPath.ToString() + ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString() + @"\";
    //        //string HotelDBPath = BakPath + jsonList[0]["HotelID"].ToString() + @"\";
    //        string BakPath = ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString();
    //        string BakupDBName = ConfigurationManager.AppSettings["BakupDBName"].ToString();
    //        //string BakPath = "RegisterationBackup";
    //        //string BakupDBName = "Registeration";
    //        //DateTime DTime = DateTime.Now;
    //        string BakFileName = @"\DBNAME\_\DATE\_\TIME\.BAK";
    //        //目录处理，如果不存在则建立
    //      //  FSOAction Fso = new FSOAction();
    //        if (!CreateDir(BakPath))
    //        {
    //            //return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //            return "0n";
    //        }
    //        //开始备份数据库
    //        if (!BakupDB(BakupDBName, BakPath, BakFileName, "DB", 0))
    //        {
    //            return "0n";
    //        }
    //        //更新配置信息表
    //        ////string cfgSQL = "update HotelConfig set LastDBBakTime=getDate() where HotelID=@HotelID";
    //        ////SqlParameter[] cParams = {
    //        ////                            new SqlParameter("@HotelID",SqlDbType.Int)
    //        ////                         };
    //        ////cParams[0].Value = Convert.ToInt32(jsonList[0]["HotelID"].ToString());
    //        ////int Rows = DBHelper.ExecuteNonQuery(DBHelper.ConnString, CommandType.Text, cfgSQL, cParams);
    //        ////if (Rows < 1)
    //        ////{
    //        ////    return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //        ////}

    //        //删除过期的备份数据
    //        string tmpFile = "";
    //        string[] FArr = GetFileList(BakPath);
    //        int maxCount = 10;

    //        if (FArr.Length > maxCount)
    //        {
    //            //冒泡法将文件进行按时间排序
    //            for (int m = 0; m < FArr.Length; m++)
    //            {
    //                for (int n = m + 1; n < FArr.Length; n++)
    //                {
    //                    if (DateTime.Compare(File.GetLastWriteTime(FArr[m]), File.GetLastWriteTime(FArr[n])) < 0)
    //                    {
    //                        tmpFile = FArr[m];
    //                        FArr[m] = FArr[n];
    //                        FArr[n] = tmpFile;
    //                    }
    //                }
    //            }

    //            //删除过期文件
    //            for (int m = maxCount; m < FArr.Length; m++)
    //            {
    //                string[] FNameArr = FArr[m].Split('.');
    //                if (FNameArr[FNameArr.Length - 1] == "BAK")
    //                {
    //                    DeleteFile(FArr[m]);
    //                }
    //            }
    //        }
    //        //添加事件
    //      //  BaseLb.AddEvent(myAccount.AccountName, "系统：数据库备份", myAccount.HotelID);

    //        return "1n";
    //    }




    //    /// <summary>
    //    /// 验证指定路径的文件是否存在
    //    /// </summary>
    //    /// <param name="DirPath">要验证的文件路径与名称</param>
    //    /// <returns></returns>
    //    public bool CheckFileExists(string FileName)
    //    {
    //        return File.Exists(FileName);
    //    }





    ////    还原数据库
    //    public string RestorDB(string param)
    //    {
    //        //权限验证
    //        //if (myAccount.PMCheck(1, false) == false)
    //        //{
    //        //    return myAccount.StatusCode;
    //        //}

    //        JsonData jsonList = JsonMapper.ToObject(param);
    //       // string BakPath = HttpRuntime.AppDomainAppPath.ToString() + ConfigurationManager.AppSettings["DBBakupPath"].ToString() + @"\" + jsonList[0]["HotelID"].ToString() + @"\";
    //        string BakPath = ConfigurationManager.AppSettings["RegisterationBakupPath"].ToString();
    //        string BakFile = BakPath + jsonList[0]["BakFile"].ToString();
    //        string BakupDBName = ConfigurationManager.AppSettings["BakupDBName"].ToString();
    //       // FSOAction Fso = new FSOAction();
    //        //验证备份文件是否存在
    //        if (!CheckFileExists(BakFile))
    //        {
    //            return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //        }

    //        //开始恢复数据库
    //        if (!RestoreDB(BakupDBName, BakFile))
    //        {
    //            return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //        }

    //        ////更新配置信息表
    //        //string cfgSQL = "update HotelConfig set LastDBRestorTime=getDate() where HotelID=@HotelID";
    //        //SqlParameter[] cParams = {
    //        //                            new SqlParameter("@HotelID",SqlDbType.Int)
    //        //                         };
    //        //cParams[0].Value = Convert.ToInt32(jsonList[0]["HotelID"].ToString());
    //        //int Rows = DBHelper.ExecuteNonQuery(DBHelper.connString, CommandType.Text, cfgSQL, cParams);
    //        //if (Rows < 1)
    //        //{
    //        //    return "{'result':'" + ReturnResultType.Failure + "','content':''}";
    //        //}
    //        //添加事件
    //       // BaseLb.AddEvent(myAccount.AccountName, "系统：数据库还原", myAccount.HotelID);
    //        return "{'result':'" + ReturnResultType.Success + "','content':''}";
    //    }



    //    /// <summary>
    //    /// 创建指定路径的目录
    //    /// </summary>
    //    /// <param name="DirPath">要创建的目录路径与名称</param>
    //    /// <returns></returns>
    //    public bool CreateDir(string DirPath)
    //    {
    //        try
    //        {
    //            if (!Directory.Exists(DirPath))
    //            {
    //                Directory.CreateDirectory(DirPath);
    //            }
    //            else
    //            {
    //                return true;
    //            }
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //        return true;
    //    }



    //    /// <summary>
    //    /// 备份数据库
    //    /// </summary>
    //    /// <param name="DBName">要备份的数据库名称,不指定则备份当前数据库</param>
    //    /// <param name="BakPath">备份文件的存放目录,不指定则使用SQL默认的备份目录</param>
    //    /// <param name="BakFName">备份文件名,文件名中可以用"DBNAME"代表数据库名,"DATE"代表日期,"TIME"代表时间</param>
    //    /// <param name="BakType">备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份</param>
    //    /// <param name="IsAppendFile">追加或覆盖备份文件</param>
    //    /// <returns>无</returns>
    //    public bool BakupDB(string DBName, string BakPath, string BakFName, string BakType, int IsAppendFile)
    //    {
    //        //定义备份数据库的存储过程名称
    //        string bakSql = "sp_backupdb";
    //        SqlParameter[] bParameter = { 
    //                                        new SqlParameter("@DBName",SqlDbType.NVarChar),
    //                                        new SqlParameter("@BakPath",SqlDbType.NVarChar,260),
    //                                        new SqlParameter("@BakFName",SqlDbType.NVarChar,260),
    //                                        new SqlParameter("@BakType",SqlDbType.NVarChar,10),
    //                                        new SqlParameter("@IsAppendFile",SqlDbType.Bit)
    //                                    };
    //        bParameter[0].Value = DBName;
    //        bParameter[1].Value = BakPath;
    //        bParameter[2].Value = BakFName;
    //        bParameter[3].Value = BakType;
    //        bParameter[4].Value = IsAppendFile;
    //        try
    //        {
    //            DBHelper.ExecuteNonQuery(DBHelper.ConnString, CommandType.StoredProcedure, bakSql, bParameter);
    //            return true;
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }

    //        /*
    //        string masterConnStr = ConfigurationManager.ConnectionStrings["ConnectToMaster"].ConnectionString;
    //        SqlConnection BakConn = new SqlConnection(masterConnStr);

    //        SqlCommand cmdBK = new SqlCommand();
    //        cmdBK.CommandType = CommandType.Text;
    //        cmdBK.Connection = BakConn;
    //        cmdBK.CommandText = @"backup database " + DBName + " to disk='" + BakPath + "' with init";

    //        try
    //        {
    //            BakConn.Open();
    //            cmdBK.ExecuteNonQuery();
    //            return true;
    //        }
    //        catch (Exception ex)
    //        {
    //            return false;
    //        }
    //        finally
    //        {
    //            BakConn.Close();
    //            BakConn.Dispose();
    //        }  
    //        */
    //    }


    //    /// <summary>
    //    /// 返回指定目录的文件列表
    //    /// </summary>
    //    /// <param name="DirPath">要返回文件列表的父目录路径</param>
    //    /// <returns>字符串数组,如果异常则返回null</returns>
    //    public string[] GetFileList(string DirPath)
    //    {
    //        try
    //        {
    //            if (Directory.Exists(DirPath))
    //            {
    //                return Directory.GetFiles(DirPath);
    //            }
    //            else
    //            {
    //                return null;
    //            }
    //        }
    //        catch (Exception)
    //        {
    //            return null;
    //        }
    //    }



    //    /// <summary>
    //    /// 删除指定路径的文件
    //    /// </summary>
    //    /// <param name="FileName">要删除的文件和文件名</param>
    //    /// <returns></returns>
    //    public bool DeleteFile(string FileName)
    //    {
    //        try
    //        {
    //            if (File.Exists(FileName))
    //            {
    //                File.Delete(FileName);
    //            }
    //            else
    //            {
    //                return true;
    //            }
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //        return true;
    //    }

    //    /// <summary>
    //    /// 恢复数据库
    //    /// </summary>
    //    /// <param name="DBName">定义恢复后的数据库名,默认为备份的文件名</param>
    //    /// <param name="BakFile">定义要恢复的备份文件名</param>
    //    /// <returns>返回bool值</returns>
    //    public bool RestoreDB(string DBName, string BakFile)
    //    {
    //        string masterConnStr = ConfigurationManager.ConnectionStrings["ConnectToMaster"].ConnectionString;
    //        SqlConnection ReConn = new SqlConnection(masterConnStr);
    //        ReConn.Open();

    //        //强制停止相关链接进程
    //        SqlCommand cmd = new SqlCommand("SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='" + DBName + "'", ReConn);
    //        SqlDataReader dr;
    //        dr = cmd.ExecuteReader();
    //        ArrayList list = new ArrayList();
    //        while (dr.Read())
    //        {
    //            list.Add(dr.GetInt16(0));
    //        }
    //        dr.Close();
    //        for (int i = 0; i < list.Count; i++)
    //        {
    //            //cmd = new SqlCommand("KILL {0}" + list[i], ReConn);
    //            cmd = new SqlCommand(string.Format("KILL {0}", list[i]), ReConn);
    //            cmd.ExecuteNonQuery();
    //        }

    //        SqlCommand cmdRT = new SqlCommand();
    //        cmdRT.CommandType = CommandType.Text;
    //        cmdRT.Connection = ReConn;
    //        cmdRT.CommandText = @"restore database " + DBName + " from disk='" + BakFile + "' WITH REPLACE";
    //        try
    //        {
    //            cmdRT.ExecuteNonQuery();
    //            return true;
    //        }
    //        catch (Exception)
    //        {
    //            return false;
    //        }
    //        finally
    //        {
    //            ReConn.Close();
    //        }
    //    }





    }
}
